#! /usr/bin/sdlbrt

finp$="picture.png"
if argc>=3 then:finp$=command$(3):end if

clstr=0
xed=256:yed=192:wdwd=1
shell("rm _t*.png")
shell("convert "+finp$+" -scale "+str$(xed*4)+"x"+str$(yed*4)+"! _t2.png")
shell("convert "+finp$+" +dither -colors 32 _t4.png")

'shell("convert _t4.png +dither -posterize 8 _t5.png")
'shell("convert _t4.png +dither -channel RB -posterize 4 -channel G -posterize 8 _t5.png")

shell("convert _t4.png -channel R -separate _t4r.png")
shell("convert _t4.png -channel G -separate _t4g.png")
shell("convert _t4.png -channel B -separate _t4b.png")

shell("convert _t4r.png -posterize 4 _t5r.png")
shell("convert _t4g.png -posterize 8 _t5g.png")
shell("convert _t4b.png -posterize 4 _t5b.png")

shell("convert _t5r.png _t5g.png _t5b.png -set colorspace RGB -combine _t5.png")

'convert  separate_red.gif separate_green.gif separate_blue.gif -set colorspace RGB -combine -set colorspace sRGB rose_combined.gif

shell("convert _t5.png +dither -colors 16 _t6.png")
shell("convert _t2.png -quantize CMY -remap _t6.png -dither Riemersma _t3.png")

setdisplay(xed*4,yed*4,32,wdwd):paper(8^8-1):ink(0):pen(0):cls
loadimage("_t3.png",1):pasteicon(0,0,1)
shell("rm _t*.png")

dim p1[16],k1[16]

function grayscale(ct):
  cq=ct
  bq=bitwiseand(cq,255):cq=int(cq/256)
  gq=bitwiseand(cq,255):cq=int(cq/256)
  rq=bitwiseand(cq,255):cq=int(cq/256)
  return int(((rq*30)+(gq*59)+(bq*11))/100)
  end function

for y2=0 to yed-1
  setcaption(str$(int(100*(y2/yed)))+"%")
  for x2=0 to xed-1
    for y1=0 to 3:for x1=0 to 3
      xq=y1*4+x1
      p1[xq]=point(x2*4+x1,y2*4+y1)
      next:next
    for i=0 to 15
      k1[i]=grayscale(p1[i])
      next
    for j=0 to 14:for i=0 to 14
      if k1[i]>k1[i+1] then:
        tm=k1[i]:k1[i]=k1[i+1]:k1[i+1]=tm
        tm=p1[i]:p1[i]=p1[i+1]:p1[i+1]=tm
        end if
      next:next

    if clstr=0 then: '- 4x4 cluster
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[ 6]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 9]):dot(x2*4+2,y2*4+0)
    ink(p1[15]):dot(x2*4+3,y2*4+0)
    ink(p1[ 4]):dot(x2*4+0,y2*4+1)
    ink(p1[10]):dot(x2*4+1,y2*4+1)
    ink(p1[ 3]):dot(x2*4+2,y2*4+1)
    ink(p1[13]):dot(x2*4+3,y2*4+1)
    ink(p1[ 8]):dot(x2*4+0,y2*4+2)
    ink(p1[14]):dot(x2*4+1,y2*4+2)
    ink(p1[ 1]):dot(x2*4+2,y2*4+2)
    ink(p1[ 7]):dot(x2*4+3,y2*4+2)
    ink(p1[ 2]):dot(x2*4+0,y2*4+3)
    ink(p1[12]):dot(x2*4+1,y2*4+3)
    ink(p1[ 5]):dot(x2*4+2,y2*4+3)
    ink(p1[11]):dot(x2*4+3,y2*4+3)
    end if
    
    if clstr=1 then: '- 4x2 cluster
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[ 4]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 8]):dot(x2*4+2,y2*4+0)
    ink(p1[12]):dot(x2*4+3,y2*4+0)
    ink(p1[10]):dot(x2*4+0,y2*4+1)
    ink(p1[14]):dot(x2*4+1,y2*4+1)
    ink(p1[ 2]):dot(x2*4+2,y2*4+1)
    ink(p1[ 6]):dot(x2*4+3,y2*4+1)
    ink(p1[ 1]):dot(x2*4+0,y2*4+2)
    ink(p1[ 5]):dot(x2*4+1,y2*4+2)
    ink(p1[ 9]):dot(x2*4+2,y2*4+2)
    ink(p1[13]):dot(x2*4+3,y2*4+2)
    ink(p1[11]):dot(x2*4+0,y2*4+3)
    ink(p1[15]):dot(x2*4+1,y2*4+3)
    ink(p1[ 3]):dot(x2*4+2,y2*4+3)
    ink(p1[ 7]):dot(x2*4+3,y2*4+3)
    end if

    if clstr=2 then: '- 2x4 cluster
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[10]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 1]):dot(x2*4+2,y2*4+0)
    ink(p1[11]):dot(x2*4+3,y2*4+0)
    ink(p1[ 4]):dot(x2*4+0,y2*4+1)
    ink(p1[14]):dot(x2*4+1,y2*4+1)
    ink(p1[ 5]):dot(x2*4+2,y2*4+1)
    ink(p1[15]):dot(x2*4+3,y2*4+1)
    ink(p1[ 8]):dot(x2*4+0,y2*4+2)
    ink(p1[ 2]):dot(x2*4+1,y2*4+2)
    ink(p1[ 9]):dot(x2*4+2,y2*4+2)
    ink(p1[ 3]):dot(x2*4+3,y2*4+2)
    ink(p1[12]):dot(x2*4+0,y2*4+3)
    ink(p1[ 6]):dot(x2*4+1,y2*4+3)
    ink(p1[13]):dot(x2*4+2,y2*4+3)
    ink(p1[ 7]):dot(x2*4+3,y2*4+3)
    end if

    if clstr=3 then: '- "positioned"
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[12]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 3]):dot(x2*4+2,y2*4+0)
    ink(p1[15]):dot(x2*4+3,y2*4+0)
    ink(p1[ 8]):dot(x2*4+0,y2*4+1)
    ink(p1[ 4]):dot(x2*4+1,y2*4+1)
    ink(p1[11]):dot(x2*4+2,y2*4+1)
    ink(p1[ 7]):dot(x2*4+3,y2*4+1)
    ink(p1[ 2]):dot(x2*4+0,y2*4+2)
    ink(p1[14]):dot(x2*4+1,y2*4+2)
    ink(p1[ 1]):dot(x2*4+2,y2*4+2)
    ink(p1[13]):dot(x2*4+3,y2*4+2)
    ink(p1[10]):dot(x2*4+0,y2*4+3)
    ink(p1[ 6]):dot(x2*4+1,y2*4+3)
    ink(p1[ 9]):dot(x2*4+2,y2*4+3)
    ink(p1[ 5]):dot(x2*4+3,y2*4+3)
    end if

    if clstr=4 then: '- diagonal lines ("backslash")
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[ 4]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 8]):dot(x2*4+2,y2*4+0)
    ink(p1[12]):dot(x2*4+3,y2*4+0)
    ink(p1[14]):dot(x2*4+0,y2*4+1)
    ink(p1[ 2]):dot(x2*4+1,y2*4+1)
    ink(p1[ 6]):dot(x2*4+2,y2*4+1)
    ink(p1[10]):dot(x2*4+3,y2*4+1)
    ink(p1[ 9]):dot(x2*4+0,y2*4+2)
    ink(p1[13]):dot(x2*4+1,y2*4+2)
    ink(p1[ 1]):dot(x2*4+2,y2*4+2)
    ink(p1[ 5]):dot(x2*4+3,y2*4+2)
    ink(p1[ 7]):dot(x2*4+0,y2*4+3)
    ink(p1[11]):dot(x2*4+1,y2*4+3)
    ink(p1[15]):dot(x2*4+2,y2*4+3)
    ink(p1[ 3]):dot(x2*4+3,y2*4+3)
    end if


    if clstr=5 then: '- horizontal lines
    ink(p1[12]):dot(x2*4+0,y2*4+0)
    ink(p1[14]):dot(x2*4+1,y2*4+0)    
    ink(p1[13]):dot(x2*4+2,y2*4+0)
    ink(p1[15]):dot(x2*4+3,y2*4+0)
    ink(p1[ 8]):dot(x2*4+0,y2*4+1)
    ink(p1[10]):dot(x2*4+1,y2*4+1)
    ink(p1[ 9]):dot(x2*4+2,y2*4+1)
    ink(p1[11]):dot(x2*4+3,y2*4+1)
    ink(p1[ 4]):dot(x2*4+0,y2*4+2)
    ink(p1[ 6]):dot(x2*4+1,y2*4+2)
    ink(p1[ 5]):dot(x2*4+2,y2*4+2)
    ink(p1[ 7]):dot(x2*4+3,y2*4+2)
    ink(p1[ 0]):dot(x2*4+0,y2*4+3)
    ink(p1[ 2]):dot(x2*4+1,y2*4+3)
    ink(p1[ 1]):dot(x2*4+2,y2*4+3)
    ink(p1[ 3]):dot(x2*4+3,y2*4+3)
    end if

    if clstr=6 then: '- vertical lines
    ink(p1[ 0]):dot(x2*4+0,y2*4+0)
    ink(p1[ 4]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 8]):dot(x2*4+2,y2*4+0)
    ink(p1[12]):dot(x2*4+3,y2*4+0)
    ink(p1[ 2]):dot(x2*4+0,y2*4+1)
    ink(p1[ 6]):dot(x2*4+1,y2*4+1)
    ink(p1[10]):dot(x2*4+2,y2*4+1)
    ink(p1[14]):dot(x2*4+3,y2*4+1)
    ink(p1[ 1]):dot(x2*4+0,y2*4+2)
    ink(p1[ 5]):dot(x2*4+1,y2*4+2)
    ink(p1[ 9]):dot(x2*4+2,y2*4+2)
    ink(p1[13]):dot(x2*4+3,y2*4+2)
    ink(p1[ 3]):dot(x2*4+0,y2*4+3)
    ink(p1[ 7]):dot(x2*4+1,y2*4+3)
    ink(p1[11]):dot(x2*4+2,y2*4+3)
    ink(p1[15]):dot(x2*4+3,y2*4+3)
    end if

    if clstr=7 then: '- large dots 4x4
    ink(p1[12]):dot(x2*4+0,y2*4+0)
    ink(p1[ 5]):dot(x2*4+1,y2*4+0)    
    ink(p1[ 9]):dot(x2*4+2,y2*4+0)
    ink(p1[13]):dot(x2*4+3,y2*4+0)
    ink(p1[ 8]):dot(x2*4+0,y2*4+1)
    ink(p1[ 0]):dot(x2*4+1,y2*4+1)
    ink(p1[ 1]):dot(x2*4+2,y2*4+1)
    ink(p1[ 6]):dot(x2*4+3,y2*4+1)
    ink(p1[ 4]):dot(x2*4+0,y2*4+2)
    ink(p1[ 3]):dot(x2*4+1,y2*4+2)
    ink(p1[ 2]):dot(x2*4+2,y2*4+2)
    ink(p1[10]):dot(x2*4+3,y2*4+2)
    ink(p1[15]):dot(x2*4+0,y2*4+3)
    ink(p1[11]):dot(x2*4+1,y2*4+3)
    ink(p1[ 7]):dot(x2*4+2,y2*4+3)
    ink(p1[14]):dot(x2*4+3,y2*4+3)
    end if




    x1=x2 mod 4:y1=y2 mod 4
    u=point(x2*4+x1,y2*4+y1)
    ink(u):dot(x2,y2)
    next:next

grab(1,0,0,xed,yed):saveimage("_.bmp",1)
shell("convert _.bmp -colors 16 _.gif && rm _.bmp" )
shell("convert _.gif -colors 16 "+finp$+".bmp && rm _.gif" )
'shell("rm _.gif")

'shell("convert "+finp$+".png _.ppm && ppmtopi1 _.ppm > "+finp$+".pi1 && rm _.ppm")
'waitkey

